

// 接口 => 对象的类型 
// 在 TypeScript 中，我们使用接口（Interfaces）来定义对象的类型。

// TypeScript 中的接口是一个非常灵活的概念，除了可用于对类的一部分行为进行抽象以外，也常用于对「对象的形状（Shape）」进行描述。

// 对「对象的形状（Shape）」进行描述。  => 描述一个对象由哪些属性和方法




// 注意: 赋值的时候，变量的形状必须和接口的形状保持一致。
// 定义的变量比接口少了一些属性是不允许的,比接口多一些属性也是不允许的
// interface Person {
//     name:string,
//     age:number
// }
// let zhang:Person = {
//     name:"张三",
//     age:18,
//     // height:177   // 报错
// }



// 可选属性
// interface Person {
//     name:string,
//     age:number,
//     height?:number|string,  // 可选属性 => 可以有,也可以没有
//     weight?:number|string,
// }

// let zhang:Person = {
//     name:"张三",
//     age:18,
//     height:177   
// }


// 任意属性  => 有时候我们希望一个接口允许有任意的属性，可以使用如下方式：
// interface Person {
//     name:string,
//     age:number,
//     height?:number|string,  // 可选属性 => 可以有,也可以没有
//     weight?:number|string,

//     // 任意属性的属性名类型如果是字符串, 属性值的类型应该是可选属性和必写属性的联合类型 (一旦定义了任意属性，那么确定属性和可选属性的类型都必须是它的类型的子集)
//     [propName:string]:string|number|undefined,
// }

// let zhang:Person = {
//     name:"张三",
//     age:18,
//     height:177,
//     sex:"男",
// }



// 只读属性

// interface Person {
//     readonly name:string,  // 只读属性 (在对象定义之后就无法被修改)
//     age:number,
//     [propName:string]:string|number|undefined,
// }

// let zhang:Person = {
//     name:"张三",
//     age:18,
// }

// zhang.name = "李四";  // 报错  无法为“name”赋值，因为它是只读属性


    










export default {}